/*
观察递归函数的执行过程。
每一次调用，尽管调用了相同的函数，但传递的参数不一样。
*/
#include <iostream>
#include <iomanip>
using namespace std;
#define MAXLINE 10
int factorial(int n)
{   // 开始输出参数，表示开始
    cout<<setw(MAXLINE - n)<<" "<<"start with n = "<<n<<endl;
    int result = 1; 
    if(n == 0)
    {
        result = 1;
    }
    else
    {
        result = n * factorial(n - 1);
    }
    //退出前输出参数，表示本次调用结束
    cout<<setw(MAXLINE - n)<<" "<<"end with n = "<<n<<endl;
    return result;
}
int main()
{
    cout<<factorial(3);
}